# qt界面相关库

# 显示结果
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QFileDialog, QLabel, QMessageBox

from main_check.MainCheckQThread import MainCheckQThread

# 定义并初始化全局变量输入目录和输出目录
INPUT_PATH = r"D:\PyRepo\pycharm\house_plan_importor\input"
OUTPUT_PATH = r"D:\PyRepo\pycharm\house_plan_importor\output"


# 在您提供的代码中，myWork 类需要使用在 MainFrame 类中设置的输入和输出目录。为了确保 myWork 类在执行线程时能够获取到最新的目录信息，我们可以
# 采用以下步骤：
#
# 在 MainFrame 类中设置输入和输出目录的属性，并提供方法来更新这些属性。
# 在 myWork 类中添加属性来存储这些目录信息。
# 在 MainFrame 的 run 方法中启动线程之前，将最新的目录信息传递给 myWork 类。

class MainFrame(object):
    def __init__(self):
        # 初始化时设置默认的输入和输出目录
        self._main_widget = None
        self._input_path = INPUT_PATH
        self._output_path = OUTPUT_PATH

    def setupUi(self, Form):
        self._main_widget = Form
        Form.setObjectName("widget")
        Form.resize(1100, 800)

        # 加载窗口图标（确保图片文件路径正确）
        icon_path = r'./image/logo.png'  # 替换为您的图标图片路径
        Form.setWindowIcon(QIcon(icon_path))
        # 帮助图标
        self.help_icon = QtWidgets.QLabel(Form)
        self.help_icon.setGeometry(QtCore.QRect(924, 610, 51, 51))
        self.help_icon.setToolTip("")
        self.help_icon.setText("")
        self.help_icon.setPixmap(QtGui.QPixmap("./image/Home.png"))
        self.help_icon.setObjectName("help_icon")
        # 输入文件夹按钮
        self.input_btn = QtWidgets.QPushButton(Form)
        self.input_btn.setGeometry(QtCore.QRect(100, 80, 131, 41))
        self.input_btn.setObjectName("input_btn")
        # 输出文件夹按钮
        self.output_btn = QtWidgets.QPushButton(Form)
        self.output_btn.setGeometry(QtCore.QRect(100, 160, 131, 41))
        self.output_btn.setObjectName("output_btn")
        # 运行按钮
        self.run_btn = QtWidgets.QPushButton(Form)
        self.run_btn.setGeometry(QtCore.QRect(100, 240, 131, 41))
        self.run_btn.setObjectName("run_btn")
        # 输入文件夹标签
        self.input_label = QtWidgets.QLabel(Form)
        self.input_label.setGeometry(QtCore.QRect(100, 125, 581, 16))
        self.input_label.setStyleSheet("color:black")
        self.input_label.setObjectName("input_label")
        self.input_label.setText("输入文件夹：" + str(self._input_path))

        # 输出文件夹标签
        self.output_label = QtWidgets.QLabel(Form)
        self.output_label.setGeometry(QtCore.QRect(100, 205, 581, 16))
        self.output_label.setStyleSheet("color:black")
        self.output_label.setObjectName("output_label")
        self.output_label.setText("输出文件夹：" + str(self._output_path))

        # 帮助按钮
        self.help_btn = QtWidgets.QPushButton(Form)
        self.help_btn.setGeometry(QtCore.QRect(920, 650, 41, 23))
        self.help_btn.setObjectName("hele_btn")

        # 日志列表（消息列表）
        self.log_list = QtWidgets.QListWidget(Form)
        self.log_list.setGeometry(QtCore.QRect(100, 320, 900, 450))
        self.log_list.setObjectName("log_list")
        item = QtWidgets.QListWidgetItem()
        self.log_list.addItem(item)

        self.help_icon.raise_()
        self.input_btn.raise_()
        self.output_btn.raise_()
        self.run_btn.raise_()
        self.input_label.raise_()
        self.output_label.raise_()
        self.help_btn.raise_()
        self.log_list.raise_()

        # 创建审核线程对象################################################################################################
        self.thread = MainCheckQThread()

        self.retranslateUi(Form)

        # 绑定事件
        self.input_btn.clicked.connect(self.on_btn_select_input_click)
        self.output_btn.clicked.connect(self.on_btn_select_output_click)

        # 运行按钮绑定run函数
        self.run_btn.clicked.connect(self.run)

        # 绑定发消息（写日志的函数）
        self.thread.timeout.connect(self.update_log)

        self.help_btn.clicked.connect(self.open_help)

        QtCore.QMetaObject.connectSlotsByName(Form)

    def update_log(self, str):
        self.log_list.addItem(str)
        self.log_list.scrollToBottom()  # 添加完项目后滚动到底部

        if r"结束，用时" in str :
            if self._main_widget is not None:
                # 显示一个简单的信息提示框
                QMessageBox.information(self._main_widget, '提示框', str)

    # 开始执行检查，启动检查的线程
    def run(self):
        # 在启动线程之前，将当前的目录信息传递给线程工作类
        self.thread.set_work_directories(self._input_path, self._output_path)
        # 设置审核线程的状态为真，使得其执行
        self.thread.set_working(True)
        # 开始审核
        self.thread.start()

    def open_help(self):
        self.help_window = QWidget()
        self.help_window.setGeometry(500, 500, 500, 500)
        self.help_window.setWindowTitle("帮助")
        help_info = QLabel("该软件为分户图批量上传工具v1.0\n基于Paddle框架，使用OCR和PyQT5技术开发\n" +
                           "该软件版权归广州市城市勘测设计研究院有限公司所有\n使用过程中如果出现问题，请联系唐工。", self.help_window)
        help_info.move(50, 50)
        self.help_window.show()

    def on_btn_select_input_click(self):
        # 选择输入目录
        self._input_path = QFileDialog.getExistingDirectory(None, "选择输入目录")
        self.input_label.setText("输入文件夹：" + str(self._input_path))
        # 这里可以处理input_dir，比如显示在某个标签上或用于后续操作
        print("选择的输入目录是:", self._input_path)

    def on_btn_select_output_click(self):
        # 选择输出目录
        self._output_path = QFileDialog.getExistingDirectory(None, "选择输出目录")
        self.output_label.setText("输出文件夹：" + str(self._output_path))
        # 这里可以处理output_dir，比如显示在某个标签上或用于后续操作
        print("选择的输出目录是:", self._output_path)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "分户图批量上传工具v1.0"))
        self.input_btn.setText(_translate("Form", "选择输入文件夹"))
        self.output_btn.setText(_translate("Form", "选择输出文件夹"))
        self.run_btn.setText(_translate("Form", "开始运行"))
        self.help_btn.setText(_translate("widget", "帮助"))
